package org.example.test;

import org.example.controller.UserController;
import org.example.entity.MyClass;
import org.example.entity.User;
import org.example.service.UserService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ZhuJieTest01 {
    public static void main(String[] args) {
        /*
        *
        *   通过注解代替主配置文件中配置 bean 标签
        *
        *   @Component(普通)
        *   @Controller(控制层)
        *   @Service(业务层)
        *   @Respository(持久层)
        *
        *   以上四种注解的作用都是让 spring 创建 bean ,只是约定应用在不同的组件上
        *
        *
        *   注解方式 和 配置方式 使用什么?
        *
        *
        * */

        //ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-context.xml");
        ////// 根据名字创建bean
        ////User user = (User) context.getBean("user");
        //// 根据类型创建bean
        //User user = (User) context.getBean(User.class);
        //System.out.println(user);

        //ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-context.xml");
        //UserController userController = (UserController) context.getBean("userController");
        //System.out.println(userController.getUserService());
        /*
        *   如果有多个 impl 文件，系统无法决定根据哪个来创建对象，会运行报错，可以在想要优先使用的 impl 文件中添加 @Primary 注解指定优先级
        * */

        // 属性文件的依赖注入
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-context.xml");
        MyClass myClass = (MyClass) context.getBean("myClass");
        System.out.println(myClass.abc);
    }
}
